package com.xinnet.mms.dept.service;

import java.sql.SQLException;
import java.util.List;

import org.springframework.stereotype.Service;

import com.xinnet.mms.entity.Customer;
import com.xinnet.mms.entity.Dept;
import com.xinnet.mms.entity.Emp;
@Service
public interface DeptService {
	/**
	 * 获取部门列表
	 * @return
	 */
	public List<Dept> getDeptList();
	/**
	 * 添加部门
	 * @param dept
	 */
	public void addDept(Dept dept);
	/**
	 * 更新部门
	 * @param dept
	 * @param areaStr
	 * @param productStr
	 */
	public void updateDept(Dept dept,String areaStr,String productStr);
	/**
	 * 删除部门
	 * @param deptId
	 * @return 0:不成功 1成功
	 */
	public String delDeptById(String deptId);
	/**
	 * 获取部门Tree
	 * @return json tree
	 */
	public String getDeptTree();
	/**
	 * 添加或更新时，是否可以使用新的部门名称
	 * @param isUpdate
	 * @param dname
	 * @param id
	 * @return true false
	 */
	public String isCanUseTheDeptName(String isUpdate,String dname,String id);
	/**
	 * 添加部门
	 * @param dept
	 * @param areaStr
	 * @param productStr
	 */
	public void addDepartment(Dept dept,String areaStr,String productStr);
	/**
	 * 更新部门
	 * @param deptId
	 * @return
	 */
	public String updateDeptByDeptId(String deptId);
	/**
	 * 根据部门ID获取部门
	 * @param deptId
	 * @return Dept
	 */
	public Dept getDeptByDeptId(String deptId);
	/**
	 * 根据部门ID获取这个部门下的员工
	 * @param deptId
	 * @return Emp
	 */
	public Emp getEmpListByDeptId(String deptId);
	
	public List<Dept> getDeptByParentId(String deptId);
	
	/**
	 * 
	 * 方法描述：根据当前登录人的部门ID 获取其部门以及其子部门的tree Json字符串
	 * 
	 *@param deptId
	 *@return
	 *
	 * @author 李丽华[lilihua@xinnet.com]
	 *
	 *	       2014-3-19 下午8:51:43
	 */
	public String getDeptTreeByDeptId(String deptId);
	
	/**
	 * 获取员工所在的部门信息
	 * @param empNo
	 * @return
	 */
	public Dept getDeptByEmpNo(String empNo);
	/**
	 * 
	 * 功能描述：通过区域ID/产品CODE取得部门
	 * 
	 * @author 王湛智
	 * 
	 * @param customer
	 * @return
	 * @throws SQLException
	 */
	public Dept getDeptByProductCodeAndAreaId(Customer customer) throws SQLException;
	
	/**
	 * 获取子节点ID列表
	 * @param deptId
	 * @return
	 */
	public String getChildNodeId(String deptId);
	
	/**
	 * 获取Dept列表
	 * @param deptIdStr
	 * @return
	 */
	public List<Dept> getDeptListByDeptIdStr(String deptIdStr);
	/**
	 * 
	 *
	 * 功能描述：根据产品code 重置部门内所有员工的可分配标签
	 * 
	 * @author 湛智
	 *
	 * @throws 2014年6月23日
	 *
	 */
	public void resetAllotLabelByProductCode(String productCode) throws Exception;
	/**
	 * 
	 *
	 * 功能描述：同步部门关系
	 * 
	 * @author 湛智
	 *
	 * @throws 2014年7月17日
	 *
	 */
	public void sysnDeptRelation() throws Exception;
	
	/**
	 * 
	 *
	 * 功能描述：获取公司名字
	 * 
	 * @author yanlvshui
	 *
	 * @throws 2014年8月11日
	 *
	 */
	public String getCompanyNameByCompId(String companyId) throws Exception;
	
	/**
	 * 获取所有直销部
	 * @return
	 */
	public List<Dept> getDeptByString();
}
